/* 
  1 实现一个队列 first in first out fifo
  enqueue
  dequeue
  isEmpty()
  getSize()
  getFront() 查看队首元素
*/
/* 
  数组实现的队列时间复杂度
  enqueue O(1)
  dequeue O(n)
  isEmpty() O(1)
  getSize() O(1)
  getFront() O(1)
  3 但是可以使用循环队列的方式把出队变成O(1)
*/
class Queue {
  constructor() {
    this.arr = [];
  }

  isEmpty() {
    return this.arr.length === 0;
  }
  getSize() {
    return this.arr.length;
  }
  getFront() {
    return this.arr[0];
  }

  enqueue(data) {
    this.arr.push(data);
  }

  dequeue() {
    return this.arr.shift();
  }
}

const queue = new Queue();
queue.enqueue(1);
queue.enqueue(2);
queue.enqueue(3);
// 1 2 3
console.log(queue.dequeue());
console.log(queue.dequeue());
console.log(queue.dequeue());
